/**
 * 公共方法类，用来处理格式化数据
 * @author lld
 * @date 2014-1-9
 * */
package com.douyu.water.util;

import java.io.InputStream;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;
import java.util.Iterator;

import net.sf.json.JSONObject;

public class Func 
{
	
   /**
    * 将byte数组转化为十六进制字符
    * @param Str 要进行转化的字符串
    * @return String 转化后的字符串
    * */
   public static String strByte2Hex(byte[] str)
   {
	   if(str == null || str.length == 0)
	   {
		   return null;
	   }
	   StringBuffer result = new StringBuffer();
	   byte[] temp = str;
	   String tempstr ="";
	   for(int i = 0;i < temp.length;i++)
	   {		   
		   tempstr = Integer.toHexString(temp[i]& 0XFF);		   
		   if(tempstr.length() == 1)
		   {
			   tempstr = "0" + tempstr;
		   }		   
		   result.append(tempstr);
	   }
	   return result.toString();
   }
   /**
    * 通过短线网关发送验证短信
    * @param phone String
    *         -接收信息的手机号码
    * @param path String
    *         -短信网关接口
    * */
   public static void sendMsg(String url_str)throws Exception
   {	      
	      URL url = new URL(url_str);
		  InputStream in = url.openStream();
		  byte[] b = new byte[1024];
		  while(in.read(b)>-1)
		  {
			  
		  }
		  in.close();
		  url = null;
   }
   /**
    * 产生一个随机的六位数字符串
    * */
   public static String createCode()
   {
	   int random =new java.util.Random().nextInt();
	   random = Math.abs(random);
		if(random < 100000)
		{
			random = random * 100000;
		}
		String rand_str = String.valueOf(random);
		if(rand_str.length() > 6)
		{
			rand_str = rand_str.trim().substring(0,6);
		}
		return rand_str;
   }
   
   /**
    * 格式化日期字符串
    * @param date Date 带格式化日期
    * @param l boolean true 长日期格式，false短日期格式
    * @return
    */
   public static String formatDate(Date date,boolean l)
   {
	   if(date == null)
	   {
		   return null;
	   }
	   String parrten_l = "yyyy-MM-dd HH:mm:ss";
	   String parrten_s = "yyyy-MM-dd";
	   SimpleDateFormat format = null;
	   if(l)
	   {
		   format = new SimpleDateFormat(parrten_l);
	   }
	   else
	   {
		   format = new SimpleDateFormat(parrten_s);
	   }
	   return format.format(date);
   }
   /**
    * 将字符串转化为十六进制字符
    * @param Str 要进行转化的字符串
    * @return String 转化后的字符串，如果参数为null或者空字符串，则返回null
    * */
   public static String strByte2Hex(String str)
   {
	   if(str == null || str.equals(""))
	   {
		   return null;
	   }	   
	   byte[] temp = str.getBytes();	   
	   return strByte2Hex(temp);
   }
   /**
    * 将字符串转化为十六进制字符
    * @param str要转化的字符串
    * @return 转化后的字符数组,参数为null或者空字符串，返回null
    * */
   public static String hexString2String(String str)
   {	  
	   byte[] rs = hexString2Bytes(str);
	   if(rs != null)
	   {
		   return new String(rs);
	   }
	   else 
	   {
		   return null;
	   }
   }
   /**
    * 将字符串转化为字节数组
    * @param str要转化的字符串
    * @return 转化后的字符数组,参数为null或者空字符串，返回null
    * */
   public static byte[] hexString2Bytes(String str)
   {
	   if(str == null || str.trim().equals(""))
	   {
		   return null;
	   }	   
	   byte[] data = str.getBytes();
	   int len = data.length;
	   byte[] rs = new byte[len / 2];
	   for(int i = 0;i < len;i += 2)
	   {
		   String temp_str = new String(data,i,2);
		   rs[i / 2] = (byte)(Integer.parseInt(temp_str,16));
	   }
	   return rs;
   }
   /**
    * 处理为null或者两边含有空格的字符串
    * @param str 要检测的字符串
    * @return 处理后的字符串
    * */
   public static String trimEmpty(String str)
   {
	   if(str == null)
	   {
		   return str;
	   }
	   else
	   {
		   return str.trim();
	   }
   }
   /**
    * 通过json字符串获取城市名
    * @param str String
    *         -json字符串
    * */
   public static String getCityName(String str)
   {
	     if(str == null || str.trim().equals("") || str.indexOf("result") ==-1 
	    		 ||str.indexOf("addressComponent")==-1|| str.indexOf("city") ==-1)
	     {
	    	 return null;
	     }
	     JSONObject obj = JSONObject.fromObject(str);		 
		  obj = obj.getJSONObject("result");
		  obj = obj.getJSONObject("addressComponent");		 
	      return obj.getString("city");
   }
   /**
    * 将字符串转化为Date格式
    * @param datestr日期字符串
    * @return Date日期对象
    * @exception 日期格式不正确
    * */
   public static Date parseString2Date(String datestr)throws ParseException
   {
	   if(datestr.indexOf(" ") > 0)
	   {
		   return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(datestr);
	   }
	   else
	   {
		   return new SimpleDateFormat("yyyy-MM-dd").parse(datestr);
	   }
   }
   /**
    * 根据距离计算两点间的经纬度差值 
    * @param distance float
    *        -两点间距离，单位为千米
    * @param lat double
    *        -维度值
    * */
   public static String getLngALat(float distance,double lat)
   {
	   if(distance == 0)
	   {
		   return "0,0";
	   }
	   //获取经度差值
	   String lng = String.valueOf(distance /(111 * java.lang.Math.cos(lat)));
	   //获取维度差值
	   String latStr = String.valueOf(distance/111);
	   return lng+","+latStr;
   }
   /**
    * 计算两点经纬度之间的距离
    * @param longt1 double
    *         -起点经度
    * @param lat1 double
    *         -起点维度
    * @param longt2 double
    *         -终点经度
    * @param lat2 double
    *         -终点维度
    * @return double
    * */
   public static int getDistance(double longt1, double lat1, double longt2, double lat2)
   {
	    double PI = 3.14159265358979323; //圆周率
	    double R = 6371229;             //地球的半径
	    double x,y, distance;
        x=(longt2-longt1)*PI*R*Math.cos( ((lat1+lat2)/2)*PI/180)/180;
        y=(lat2-lat1)*PI*R/180;
        distance=Math.hypot(x,y);
        distance = Math.floor(distance);
        int dis = (int)distance;
        return dis;
   }
   
   /**
    * 获取随机UUID
    * @return String
    * */
   public static String getNewId()
   {
	   return java.util.UUID.randomUUID().toString().toLowerCase().replaceAll("-","");
   }
}
